In prior art memory systems involving non-volatile memory (e.g. flash memory, etc.), such memory must be erased before it is written. Specifically, when a portion of stored data has been changed, an entire corresponding block of memory is read, such block is then erased, the data is edited to reflect the change, after which the entire block of memory must be written with the new data. Thus, when a 4 KB page of memory is written, for example, 512 KB of memory is written.
Some prior art techniques have been developed for sequentially grouping data writes in an effort to reduce the need the amount of data that must be written. However, such techniques suffer drawbacks in systems that have prevalent random writes (e.g. in database systems, etc.).
Still yet, some prior art techniques have addressed these drawbacks by writing random data sequentially, and then use a table or similar data structure to track where the data resides. While such technique improves on previous methods, it does allow for old data (e.g. data which was changed and then stored in a new location) to remain stored in memory. When dealing with such old data (i.e. “garbage,” etc.), a process typically finds blocks of memory containing such old data, and copies any useful data from such block to other pages of memory, until a full block of such old data is collected and then erased. As a consequence, in the prior art, more data is written because of the collection of the old data (e.g. garbage collection) than the amount of data written by a host computer. For example, valid data may be copied from garbage collected blocks to create at least one empty block for an erasure operation.
There is thus a need for addressing these and/or other issues associated with the prior art.